Houdiniメモ : 円に外接する円群を作る
以下のような、円に外接する円群の作り方を紹介します。
https://gyazo.com/5ff985a92aed1441248b6ce1b597174e
作ったもの
https://gyazo.com/6ce7d718de23b1bb48d0558c41f1fc93
考え方
https://gyazo.com/9f409c383ed1b0b50c1315bacbb153e2
ノード構成について
■Subnetwork
今回はSubnetwork上でパラメータを定義し、その内部で内接円を並べるノードを実装しました。
table:Subnetworkパラメータ
ラベル パラメータ名 詳細
N r 内接円の個数
Radius radius 外接円の個数
https://gyazo.com/94e115505dfd6ec9999acec757311bcf
■Subnetwork内部実装
AttributeWrangleにて内接円の半径を計算しています。
https://gyazo.com/feb6e85fe67b4583653f16bf65b8e8b0
■AttributeWrangleの実装
code:AttributeWrangle(c)
//////////////////////////////////////////
// 半径Rの円に内接する円の半径rを求める
//////////////////////////////////////////
int N = chi("N"); // 正多角形の頂点数
float R = chf("R"); // 正N角形の1辺の長さ
float theta = 2 * $PI / N;
float polygonL = R * sqrt(2 - 2 * cos(theta)); // 正N角形の辺の長さ
float r = polygonL / 2.0;
// 円はR + r の円に外接する。
// R / (R +r) 倍することで半径Rの円に外接させることができる
r *= R/(R + r);
// 内接円の半径としてアトリビュートへ保存
f@r = r;
https://gyazo.com/6f6ddf35978d57c9cf7956705abc06a2
■circle_points の設定
table:param
Uniform Scale ch("../radius") - detail("../OUT_SmallCircle1", "r", 0)
Divisions ch("../n")
https://gyazo.com/9eef7ba6c55980ecf118896c3a54f9a5
■circle_outline の設定
table:params
Uniform Scale ch("../radius")
https://gyazo.com/5cdda002379788b3bf19c1d7c7bdc39a